コマンドラインから JSON が簡単に作れるツール『jo』をEC2にインストールしてみた&ドキュメントを読んでみた
先日RSSフィードを徘徊していたら下記のエントリがバズっていたので早速EC2環境でも使えるように導入してみよう、そしてどんな事が出来るのか実際試してみようと思い、現時点で公開されているドキュメントをざっくり読んでみました。当エントリはそのまとめ内容となります。
JSONパーサーとしては『jq』が有名ですが『jo』は逆にJSONオブジェクトをコマンドラインから生成するツールとなっています。Jan-Piet Mens氏により、ソースコード及びドキュメントがgithubで公開されています。
jo 0.7 released https://t.co/CerP62JH8k (read about it at https://t.co/5z1orYMam4) #json #cli
— Jan-Piet Mens (@jpmens) 2016, 3月 9
『jo』をAmazon Linux EC2にインストールしてみた
まずは環境導入から。GitHubのドキュメントには幾つか方法が展開されていましたが、当エントリではgitからソースをcloneし、ビルドする方法を試してみたいと思います。
Amazon Linux EC2インスタンスを用意し、git cloneでソースコード一式を取得。
$ sudo yum -y update $ sudo yum -y install git $ git clone git://github.com/jpmens/jo.git $ cd jo/
ドキュメントではautoreconfコマンドを実施とありますが、初期状態ではインストールされていないためDevelopment Toolsをインストールして先に進みます。
$ autoreconf -i -bash: autoreconf: コマンドが見つかりません $ sudo yum -y groupinstall "Development Tools" $ autoreconf -i configure.ac:18: installing './install-sh' configure.ac:18: installing './missing' Makefile.am: installing './INSTALL' Makefile.am: installing './depcomp'
あとは手順通り。
$ ./configure $ make check $ sudo make install
導入完了です。
$ jo -v jo 0.7 $ jo -version jo 0.7
『jo』のマニュアルを読んでみた
joのマニュアルは以下URLより遷移可能です。そこまでボリュームは大きくなく、コンパクトにまとめられています。
説明
- joは、与えられた引数や標準入力からJSON文字列を標準出力に生成します。
- -aオプションを指定しない場合、joはKeyと、その値(value)からなるkey=valueまたはkey@valueのペアで構成されるJSONオブジェクトを生成します。
- joはJSONで数値や文字列、NULL値を作成するために値の型の推測を試みます。
- joはkey@valueをboolean型のJSON要素として取り扱います: もし値がTで始まっていた、もしくは0より大きな値だった場合、結果はtrueとなり、それ以外の場合はfalseとなります。
- イコール(=)の後に値が無い、または空値の場合、NULLのJSON要素が返ります。
- -aオプションが指定された場合、joはオブジェクトではなく配列を作成します。
実行例
JSONオブジェクトの生成。正しくフォーマットされたfloat型の値の場合は結果が文字列型となる事に注意。
$ jo tst=1457081292 lat=12.3456 cc=FR badfloat=3.14159.26 name="JP Mens" nada= coffee@T {"tst":1457081292,"lat":12.3456,"cc":"FR","badfloat":"3.14159.26","name":"JP Mens","nada":null,"coffee":true}
現在居るフォルダパス内の要素一覧を-pオプションで綺麗に表示してみた例。
$ jo -p -a * [ "AUTHORS", "COPYING", "ChangeLog", "INSTALL", "Makefile", "Makefile.am", "Makefile.in", "NEWS", "README", "README.md", "aclocal.m4", "autom4te.cache", "config.log", "config.status", "configure", "configure.ac", "depcomp", "install-sh", "jo", "jo-logo.png", "jo.1", "jo.c", "jo.md", "jo.o", "jo.pandoc", "json.c", "json.h", "json.o", "missing", "press.md", "test-driver", "test-suite.log", "tests.sh", "tests.sh.log", "tests.sh.trs" ]
オブジェクト内オブジェクトの作成例。もし最初の文字列が左括弧『(』または角括弧『[』の場合、joは残りの部分をJSONとしてデコードしようと試みます。文字列内のスペースに注意。
$ jo -p name=JP object=$(jo fruit=Orange hungry@0 point=$(jo x=10 y=20 list=$(jo -a 1 2 3 4 5)) number=17) sunday@0 { "name": "JP", "object": { "fruit": "Orange", "hungry": false, "point": { "x": 10, "y": 20, "list": [ 1, 2, 3, 4, 5 ] }, "number": 17 }, "sunday": false }
-Bオプションを使うと、"true"と"false"の文字列による検出を無効化します。
$ jo switch=true morning@0 {"switch":true,"morning":false} $ jo -B switch=true morning@0 {"switch":"true","morning":false}
実行オプション
オプション | 説明 |
---|---|
-a | 要素を配列で表示 |
-B | Boolean値の文字列検出を無効化 |
-p | 要素を綺麗に表示 (デフォルト表示はワンライナー形式) |
-v | joのバージョンを表示 |
-V | joのバージョン及び関連情報をJSONで表示 |
オプション:-Vの実行例
$ jo -V {"program":"jo","author":"Jan-Piet Mens","repo":"https://github.com/jpmens/jo","version":"0.7"}
joのマニュアル表示
## github記載の内容と同じものが出力されました。 $ man jo
バグについて
シェル内部でjoに与えられた値を空文字に展開する場合、joはオブジェクトモードでnullを展開します。配列モードでハングアップしているように見えるかも知れませんが、これは標準入力を呼んでおりハングアップしていません。なのでバグでは無いです。
数値は意図しない値に変換される可能性があります。引用符で数値を囲んだ場合、結果は文字列として生成されます。以下比較例です。
$ jo a=1.0 {"a":1} $ jo a=\"1.0\" {"a":"1.0"}
リターンコード
正常終了時には0が返ります。0以外の場合は異常終了。
$ jo switch=true morning@1 {"switch":true,"morning":true} $ echo $? 0
まとめ
以上、JSON生成ツール『jo』をEC2にインストールしてみた&ドキュメントを読んでみたエントリでした。この手の手順は何かと手間が掛かる部分でもあったため、これだけの簡単さでJSONが作れるのは非常に嬉しいですね。JSONパーサー『jq』との併用でJSON周りの処理をより快適に・スムーズに行なえる事も期待出来そうですね。こちらからは以上です。